1. /* sdfsplit.cpp by K.Tsuru */
  2. // function ID = 3800 ver. 2.18
  3. /*********************************************************************
  4. It splits a SDouble value X in the form of rational number series
  5. X = u_0 + u_1/v + u_2/v^2 + u_3/v^4 + u_4/v^8 + ... + u_p/v^(2^{p-1}).
  6. where v = S_BASE. It returns 'p'.
  7. **********************************************************************/
  8. #ifndef SN_H
  9. #include "sn.h"
  10. #endif
  11. int SplitSDouble(const SDouble& X, SNBlock <SLFraction>& slr, const SLong& V) {
  12. uint f = howpow2(X.EffFig() + X.Hidden());
  13. slr.reserve(f);
  14. SLong u, v(V);
  15. SDouble x(X);
  16. int k = 0;
  17. u = x; // integer part of x
  18. x -= u;
  19. slr[k].num = u; slr[k].den.SetShort(1); k++;
  20. x *= v; u = x; x -= u;
  21. slr[k].num = u; slr[k].den = v; k++;
  22. for( ; x.Sign() ; k++) {
  23. x *= v; u = x; x -= u; v *= v;
  24. slr.reserve(k);
  25. slr[k].num = u; slr[k].den = v;
  26. }
  27. return k;
  28. }

sdfsplit.cpp : last modifiled at 2007/04/21 16:02:28(924 bytes)
created at 2017/10/07 10:22:50
The creation time of this html file is 2017/10/07 11:29:39 (Sat Oct 07 11:29:39 2017).